package org.example.test.test;

import java.util.HashMap;
import java.util.Map;


/**
 * 十六进制转十进制
 * 1、十六进制都是以”0X“开头的
 * 2、0xA45F转十进制方法：15(F)*16的0次方 + 5*16的1次方 + 4*16的2次方 + 10(F)*16的3次方
 */
public class SixteenToDecimal {

    private final static int BASE = 16;
    private static final Map<Character,Integer> MAP = new HashMap<>(){{
        put('0', 0);
        put('1', 1);
        put('2', 2);
        put('3', 3);
        put('4', 4);
        put('5', 5);
        put('6', 6);
        put('7', 7);
        put('8', 8);
        put('9', 9);
        put('A', 10);
        put('B', 11);
        put('C', 12);
        put('D', 13);
        put('E', 14);
        put('F', 15);
        put('a', 10);
        put('b', 11);
        put('c', 12);
        put('d', 13);
        put('e', 14);
        put('f', 15);
    }};

    public static void main(String[] args) {
        int i = sixteenToDecimal("0xA45F");
        int i1 = Integer.parseUnsignedInt("a45f", 16);
        System.out.println(i);
        System.out.println(i1);
    }

    public static int sixteenToDecimal(String s){
        String str = new StringBuffer(s.substring(2)).reverse().toString();
        char[] charArray = str.toCharArray();
        int sum = 0;
        for (int i = 0; i < charArray.length; i++) {
            sum += (int) (MAP.get(charArray[i]) * Math.pow(BASE, i));
        }
        return sum;
    }
}
